Ext.onReady(function(){

    var dateColumnRenderer =  function(value){
        if (!value) return '';
        if (value instanceof Date) {
            value = value.format('d/m/Y');
            return value;
        }
        try{
            value = Date.parseDate(value, 'Y-m-d').format('d/m/Y');
            return value;
        }catch(e){try{
            value = Date.parseDate(value, 'Y-m-d H:i:s').format('d/m/Y')
            return value;
        }catch(e){
            X.msg.FailureJs(e.message);
        }}
    }

    var hourColumnRenderer =  function(value){
        if(typeof(value) == 'string'){
            var timeDate = new Date().toDateString()+' '+value.slice(0,5);
            value = new Date(timeDate).format('H:i');
            return value;
        }
        return value;
    }

    var h_obtener_success = function(obj){
        X.load('storeConflictos', obj);
    }

     X.store({
            id     : 'storeProfesores',
            fields : [ 'idProfesor', 'nombre', 'apellido',
            {
                name: 'nombreCompleto',
                mapping:'apellido+", "+obj.nombre'
            } ]
        });

    X.store({
        id     : 'storeConflictos',
        fields : [ 'idRegistro', 'carrera', 'materia', 'fecha','inicio', 'fin', 'horas','seccion', 'ajusteInicio', 'ajusteFin','minutoshora']
    });

    var checkboxSel = new Ext.grid.CheckboxSelectionModel({header: 'Resuelto', width: 60, id: 'resuelto'});

    var h_confirmar = function(row){
        var store = X.get('storeConflictos');
        var rowCount = store.getCount();

        var detail = new Array();
        var delReg = row.get('idRegistro');
        /*for (var i=0; i<rowCount; i++){
            var record = store.getAt(i);

            var actReg = record.get('idRegistro');

            // no se incluyen los detalles del registro a eliminar
            if(delReg != actReg){
                var data = {idRegistro:'',fecha:'',inicio:'',fin:''};
                data.idRegistro=actReg;
                data.fecha=record.get('fecha');
                data.inicio=record.get('ajusteInicio');
                data.fin=record.get('ajusteFin');
                detail.push(data);
            }
        }*/

        X.ajax({
            url     : '/registro/ajax-delete-conflictos',
            params  : {
                idRegistro : delReg
                /*,
                fecha: row.get('fecha'),
                inicio: row.get('ajusteInicio'),
                fin: row.get('ajusteFin'),
                detalles: Ext.encode(detail)*/
            },
            afterSuccess : h_obtener_success
        });
    }

    var h_eliminar = function(row){
        X.msg.confirm('Está seguro de eliminar el registro del curso?',
            X.call(h_confirmar, row));
    }

    function overlapping(start1,end1,start2,end2){
        return  (start1>start2&&start1<end2)||(start2>start1&&start2<end1)||
            (end1>start2&&end1<end2)||(end2>start1&&end2<end1)||
            (start1==start2&&end1==end2);
    }
    var h_editar = function(row){
        var editStore = X.get('editStore');
        var listStore = X.get('storeConflictos');
        var n = listStore.getCount();

        var fecha = row.get('fecha');
        var ajusteInicio = row.get('ajusteInicio');
        var ajusteFin = row.get('ajusteFin');

        for (var i=0;i<n;i++){
            var r=listStore.getAt(i);
            // marcaciones en la misma fecha
            if(fecha == r.get('fecha')){
                // las horas se superponen, hay conflicto.
                if(overlapping(ajusteInicio,ajusteFin,r.get('ajusteInicio'),r.get('ajusteFin'))){
                    editStore.add(r.copy());
                }
            }
        }
        ;
        X.get('editWindow').begin();
    }
    X.grid.panel({
        id          : 'conflictosGrid',
        title       : 'Conflictos',
        //collapsed   : true,
        height      : 283,
        width       : 798,
        storeId     : 'storeConflictos',
        sm          : checkboxSel,
        x           : 10,
        y           : 50,
        columns     :[
            X.grid.text  ({
                header: 'Fecha',
                dataIndex: 'fecha',
                width: 80/*,
                renderer: dateColumnRenderer*/
            }),
            X.grid.text  ({
                header: 'Seccion',
                dataIndex: 'seccion',
                width: 120//,
                /*renderer: function(value){
                    var storeL=X.get('storeMateria');
                    var i=storeL.findExact('idCarreraMateria', value);
                    var name=storeL.getAt(i).get('nombre');
                    return name;
                }*/
            }),
            X.grid.text  ({
                header: 'Materia',
                dataIndex: 'materia',
                width: 243//,
                /*renderer: function(value){
                    var storeL=X.get('storeMateria');
                    var i=storeL.findExact('idCarreraMateria', value);
                    var name=storeL.getAt(i).get('nombre');
                    return name;
                }*/
            }),
            X.grid.text  ({
                header: 'Hora inicio',
                dataIndex: 'ajusteInicio',
                width: 65//,
                /*renderer: function(value){
                    var storeL=X.get('storeMateria');
                    var i=storeL.findExact('idCarreraMateria', value);
                    var name=storeL.getAt(i).get('nombre');
                    return name;
                }*/
            }),
            X.grid.text  ({
                header: 'Hora fin',
                dataIndex: 'ajusteFin',
                width: 65//,
                /*renderer: function(value){
                    var storeL=X.get('storeMateria');
                    var i=storeL.findExact('idCarreraMateria', value);
                    var name=storeL.getAt(i).get('nombre');
                    return name;
                }*/
            }),
            X.grid.text  ({
                header: 'Horas cátedra',
                dataIndex: 'horas',
                width: 90//,
                /*renderer: function(value){
                    var storeL=X.get('storeMateria');
                    var i=storeL.findExact('idCarreraMateria', value);
                    var name=storeL.getAt(i).get('nombre');
                    return name;
                }*/
            }),
          //  checkboxSel,
            X.grid.edit  ({
                handler : h_editar
            })
            ,
            X.grid.remove({
                handler : h_eliminar
            })
        ]
    });

    X.form.panel({
        id     : 'resolveConflictsForm',
        height : 400,
        width  : 830,
        html   : '',
        items  : [
            X.form.label ({x:10, y:16,  text:'Profesor:'}),
            X.form.combo ({x:60, y:10, width:295, id:'profesor',
                                                   dfield:'nombreCompleto',
                                                   vfield:'idProfesor',
                                                   storeId:'storeProfesores'
            }),
            /*X.form.label  ({x:10,  y:6,  text:'Si presiona el botón Generar, los registros se calcularán a partir de la última fecha de generación y hasta el día anterior a la fecha de hoy.'}),
            X.form.label  ({x:10,  y:46,  text:'Fecha de última generación:'}),
            X.form.date   ({x:160, y:40, width:95, id:'desde', disabled:true}),*/
            X.form.button ({x:370, y:10,  width:100, id:'aceptar',  text:'Aceptar'}),
            X.form.button ({x:598, y:355,  disabled: true, width:100, id:'guardar',  text:'Guardar'}),
            X.form.button ({x:708, y:355,  disabled: true, width:100, id:'cancelar', text:'Cancelar'}),
            X.get('conflictosGrid')
        ]
    });

    X.event.button('aceptar', function(){
        //X.get('aceptar').disable(),
        //X.get('materia').disable(),
        X.ajax({
            url: '/registro/ajax-conflictos',
            params: {
                tipo : 'P',
                idProfesor : X.value('profesor')
            },
            afterSuccess: h_obtener_success
        });
    });

    X.win.panel({
        id       : 'createWindow',
        title    : 'Resolver conflictos por profesor',
        modal    : false,
        items    : X.get('resolveConflictsForm')
    });

    X.get('createWindow').show();

});

